#ifndef GY_GRAPHICSDIALFINITE_H
#define GY_GRAPHICSDIALFINITE_H

#include "Graphics/GY_Object.h"
#include "GY_ControlLibrary_global.h"
#include <QObject>
#include <QGraphicsPolygonItem>
#include <QPolygonF>
#include <QPointF>
#include <QPen>
#include <QPainter>

///
/// \brief The GY_GraphicsMeterNeedle class 指针图元基类
///
class GY_CONTROLLIBRARY_EXPORT GY_GraphicsDialFinite :public GY_Object, public QGraphicsPolygonItem
{
    Q_OBJECT
public:
    GY_GraphicsDialFinite(const QString &guid,QGraphicsItem *parent = nullptr);

    ///
    /// \brief GY_GraphicsDialFinite            带参构造
    /// \param rotationPonit                    旋转中心点
    /// \param startAngle                       起始角度
    /// \param sweptAngle                       可旋转角度，正数表示相对于起始角顺时针转，负数表示相对于起始角顺时针转
    /// \param startValue                       起始位对应值
    /// \param endValue                         结束位对应值
    /// \param length                           指针长度
    /// \param width                            指针宽度
    ///
    GY_GraphicsDialFinite(const QString &guid,const QPointF &rotationPonit,const double startAngle=0,const double sweptAngle=360,const double startValue=0,const double endValue=1,const double value=0,QGraphicsItem *parent=nullptr);

protected:
    bool updatPoint(const QString &name, const QVariant &value);
    bool updateStartAngle(const QString &name, const QVariant &value);
    bool updateSweptAngle(const QString &name, const QVariant &value);
    bool updateStartValue(const QString &name, const QVariant &value);
    bool updateEndValue(const QString &name, const QVariant &value);
    bool updateValue(const QString &name, const QVariant &value);
    void initializationPropertyInfo();

    ///
    /// \brief drawDialFinite                   绘制指针
    ///
    void drawDialFinite();

    ///
    /// \brief setDatumCoord                    设置基准坐标，用于绘制指针
    /// \brief coord                            坐标（旋转中心）
    ///
    void setDatumCoord(QPointF coord);

    ///
    /// \brief setValue                         设置指针值当前值
    /// \param value                            需要设置的值
    /// \return                                 是否设置成功
    ///
    bool setValue(const double value);

private:
    ///旋转点坐标
    QPointF m_rotationPointCoord;

    ///指针长度
    double m_length;

    ///指针宽度
    double m_width;

    ////基准点是默认起始角度0度
    ///指针指尖部基准点坐标
    QPointF m_datumTopCoord;

    ///指针基准点尾部坐标
    QPointF m_datumTailCoord;

    ///指针基准点腰部左点坐标
    QPointF m_datumLeftCoord;

    ///指针基准点腰部右点部坐标
    QPointF m_datumRightCoord;

    ///指针指尖和尾部长度比例
    double m_ratil;

    ///当前旋转角度（绝对角度）--相对于起始角度（正负性质与m_sweptAngle一致）
    double m_absoluteAngle;

    ///当前旋转角度（相对角度）--相对于起始角度为0度的角度
    double m_relativeAngle;

    // QGraphicsItem interface
public:
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};
#endif // GY_GRAPHICSDIALFINITE_H
